

#ifndef BOOTPACK_H
#define BOOTPACK_H


#include<stdio.h>
#include "dtstruct.h" //数据结构
#include "iodev.h"	//IO设备
#include "int.h"  //中断(PIC)
#include "memory.h"  //内存管理
#include "sheet.h" //窗体
#include "timer.h" //定时器timer (8254)
#include "multask.h" //多任务
#include "task_que.h" //task和CQUEUE的数据结构都在这 ，放在原来的文件中会有互相加载的bug 
#include "cmd.h"   //命令行
#include "file.h"  //文件系统
#include "pict.h"
#include "../include/api.h"
#include "dsctbl.h"

typedef struct  { 
	char cyls ,leds,vmode,reserve ;
	short scrnx ,scrny ;
	char *vram ;
}BOOTINFO; //显卡 、键盘、磁盘柱面等信息




/**naskfunc.nas**/
void io_hlt(void);
void io_cli(void);
void write_mem8(int addr ,int data);
void io_out8(int port ,int data);
int io_load_eflags(void );
void io_store_eflags(int eflags);
int io_load_cr0(void);
void io_store_cr0 (int cr0);
void set_gdtr(int limit , int base_addr);
void set_idtr(int limit, int base_addr);

void farjmp(int eip, int cs); 
void load_tr (int tr) ;

void asm_handler_int20 (void);
void asm_handler_int21 (void);
void asm_handler_int2c (void);
void asm_handler_int27 (void);
void asm_handler_int0d (void);
void asm_api_main(void);
void start_app(int eip, int cs, int esp, int ds, int *tss_esp0);
void asm_end_app(void);
/**graphic.c**/
void init_screen (unsigned char * screen_buf  ,int xsize ,int ysize);
void init_palette (void);
void set_palette(int start, int end, unsigned char *rgb ) ;
void boxfill8 (unsigned char *vram ,int xsize ,unsigned char color ,int x0 ,int y0 ,int x1 ,int y1);
void init_mouse_cursor8(char *mouse, char bc) ;
void putblock8(char * vram ,int screen_x ,int picsize_x ,int picsize_y ,int x0 ,int y0 ,char *buf );
	//打印字符操作
void putchar8 (char * vram ,int xsize ,int x , int y,int color ,char *font );
void putchars8 (char *vram ,int xsize ,int x ,int y ,int color ,char *str);

void make_window8(unsigned char *buf, int xsize, int ysize, char *title ,char act);
void make_wintitle (unsigned char *buf, int xsize, int ysize, char *title ,char act)  ; //窗体的title ，被makewindow8调用
void make_textbox8(SHEET *sht, int x0, int y0, int sx, int sy, int c);

unsigned char  rgb2pal (int r,int g,int b ,int x ,int y ) ; //三原色转实际色
#define COL8_000000		0    /*  0:黑 */
#define COL8_FF0000		1    /*  1:亮红 */	
#define COL8_00FF00		2    /*  2:亮绿*/
#define COL8_FFFF00		3    /*  3:亮黄*/
#define COL8_0000FF		4    /*  4:亮蓝*/
#define COL8_FF00FF		5    /*  5:亮紫*/
#define COL8_00FFFF		6    /*  6:浅亮蓝*/
#define COL8_FFFFFF		7    /*  7:白*/
#define COL8_C6C6C6		8    /*  8:亮灰*/
#define COL8_840000		9    /*  9:暗红*/
#define COL8_008400		10   /* 10:暗绿 */
#define COL8_848400		11   /* 11:暗黄*/
#define COL8_000084		12   /* 12:暗青*/
#define COL8_840084		13   /* 13:暗紫*/
#define COL8_008484		14   /* 14:浅暗蓝*/
#define COL8_848484		15   /* 15:暗灰*/








/*str */

int str_split (char source[] ,char dest[][10]  ,char sp) ;

/*查找字符是否存在,存在则返回下标,不存在则返回-1*/
int str_strchr (const char * str, char ch) ;




#endif

   